カスタム属性を持つCognitoユーザプールを作成してみた
こんにちは、CX事業本部の若槻です。
AWSのユーザーディレクトリ機能であるAmazon Cognitoユーザープールでは、ユーザー属性としてあらかじめ仕様が決められた標準属性のほかに、管理者が任意の仕様を定義できるカスタム属性が使用できます。
今回は、カスタム属性を持つCognitoユーザプールを、マネジメントコンソールとAWS CLIの2パターンにより作成してみました。
マネジメントコンソールから作成
まず、マネジメントコンソールからCognitoユーザプールを作成してみます。
Cognitoユーザープールのコンソールにアクセスして、[ユーザープールを作成する]をクリック。
プール名を指定して、今回は[デフォルトを確認する]をクリック。
[カスタム属性の選択...]をクリック。
[カスタム属性の追加]をクリック。
追加したいカスタム属性の情報を指定(今回は属性名attr01
)し、さらに必要数だけ[別の属性の追加]をクリックして同様に情報を指定します。[次のステップ]をクリック。
[確認]画面で、指定したカスタム属性が追加されていることを確認し、[プールの作成]をクリック。
作成できました。カスタム属性名は接頭辞としてcustom:
が付くようです。
ユーザープール一覧を開くと作成したユーザープールが表示されています。
ユーザープールの[全般設定] - [属性]を見るとカスタム属性custom:attr01
が追加されています。[別の属性の追加]からカスタム属性の追加も可能なようです。
追加したカスタム属性の詳細をAWS CLIで取得してみると、コンソールでの追加時に指定ができなかったDeveloperOnlyAttribute
(開発者が変更可能な属性であるかどうか)項目はfalse
となっています。
% aws cognito-idp describe-user-pool --user-pool-id ap-northeast-1_AwJpGCDnr { "UserPool": { "Id": "ap-northeast-1_AwJpGCDnr", "Name": "myPool01", ... "SchemaAttributes": [ ... { "Name": "custom:attr01", "AttributeDataType": "String", "DeveloperOnlyAttribute": false, "Mutable": true, "Required": false, "StringAttributeConstraints": { "MinLength": "1", "MaxLength": "256" } } ], ... } }
また、コンソールから追加時にはAttributeDataType
項目はstring
かnumber
しか選択できず、CLIからは指定可能であるDateTime
やBoolean
は選択できませんでした。
これら項目を設定したい場合はAWS CLIによるユーザープールの作成(カスタム属性の追加)が必要のようです。
ちなみにドキュメントにある通り、カスタム属性は必須(Required
)を有効とすることはできません。
AWS CLIで作成
次に、AWS CLIでCognitoユーザプールを作成してみます。
カスタム属性を持つCognitoユーザプールをAWS CLIコマンドで作成する場合は、aws cognito-idp create-user-pool
コマンドでschema
オプションを使用します。
% aws cognito-idp create-user-pool \ --pool-name myPool02 \ --schema \ Name=attr01,AttributeDataType=DateTime,Mutable=true \ Name=attr02,AttributeDataType=Boolean,DeveloperOnlyAttribute=true,Mutable=true { "UserPool": { "Id": "ap-northeast-1_y98UhYIdX", "Name": "myPool02", ... "SchemaAttributes": [ ... { "Name": "custom:attr01", "AttributeDataType": "DateTime", "DeveloperOnlyAttribute": false, "Mutable": true, "Required": false }, { "Name": "dev:custom:attr02", "AttributeDataType": "Boolean", "DeveloperOnlyAttribute": true, "Mutable": true, "Required": false } ], ... } }
コンソールからも作成されたユーザープールにカスタム属性が追加されていることが確認できます。DeveloperOnlyAttribute
項目をtrue
とした場合は属性名の接頭辞にさらにdev:
が付くようです。
補足
create-user-pool
コマンドのドキュメントではschema
オプションではRequired
項目が指定可能であるように記載されていますが、実際に指定してコマンドを実行すると次のようにRequired custom attributes are not supported currently.
というエラーとなります。
% aws cognito-idp create-user-pool --pool-name myPool02 \ --schema Name=attr02,AttributeDataType=Boolean,DeveloperOnlyAttribute=true,Mutable=true,Required=true An error occurred (InvalidParameterException) when calling the CreateUserPool operation: Required custom attributes are not supported currently.
AWSフォーラムを見るとこれはドキュメントの記載ミスであり、実際にはRequired
項目はschema
で指定可能な項目ではないようです。
参考
- describe-user-pool | aws . cognito-idp
- create-user-pool | aws . cognito-idp
- Make Custom Attributes Required in a User Pool | Discussion Forums
以上